# 使用官方 Rust 镜像作为构建环境
FROM rust:latest AS builder

# 安装必要的构建工具
RUN apt-get update && apt-get install -y \
    pkg-config \
    libssl-dev \
    && rm -rf /var/lib/apt/lists/*

# 创建工作目录
WORKDIR /app

# 复制 Cargo 文件以利用 Docker 缓存
COPY Cargo.toml Cargo.lock ./

# 创建假的 src 目录和 main.rs 以预编译依赖
RUN mkdir src && echo "fn main() {}" > src/main.rs

# 构建依赖（这会缓存依赖，加快后续构建）
RUN cargo build --release

# 复制实际源代码
COPY src/ ./src/
COPY database/ ./database/

# 重新构建应用（现在会包含实际代码）
RUN cargo build --release

# 使用轻量级运行时镜像
FROM debian:bullseye-slim

# 安装运行时依赖
RUN apt-get update && apt-get install -y \
    ca-certificates \
    libssl1.1 \
    && rm -rf /var/lib/apt/lists/*

# 创建非 root 用户
RUN useradd -m -u 1000 rustuser

# 切换到工作目录
WORKDIR /app

# 从构建阶段复制二进制文件
COPY --from=builder /app/target/release/gateway_service /app/gateway_service
COPY --chown=rustuser:rustuser database/ ./database/

# 切换到非 root 用户
USER rustuser

# 暴露端口
EXPOSE 8080

# 设置健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:8080/health || exit 1

# 运行应用
CMD ["./gateway_service"]